<?php
/**
 * 风格数据服务层
 *
 * @author Shi Long <long.shi@alibaba-inc.com>
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.windframework.com
 *
 * @version $Id: PwStyle.php 24585 2013-02-01 04:02:37Z jieyin $
 */
class PwStyle
{
    /**
     * 添加.
     *
     * @param PwStyleDm $dm
     *
     * @return PwError|bool
     */
    public function addStyle(PwStyleDm $dm)
    {
        if (($r = $dm->beforeAdd()) instanceof PwError) {
            return $r;
        }

        return $this->_styleDao()->addStyle($dm->getData());
    }

    /**
     * 修改.
     *
     * @param int   $styleid
     * @param array $data
     *
     * @return bool
     */
    public function updateStyle(PwStyleDm $dm)
    {
        if (($r = $dm->beforeUpdate()) instanceof PwError) {
            return $r;
        }

        return $this->_styleDao()->updateStyle($dm->getField('app_id'), $dm->getData());
    }

    /**
     * 删除.
     *
     * @param int $styleid
     *
     * @return booelan
     */
    public function deleteStyle($styleid)
    {
        return $this->_styleDao()->deleteStyle($styleid);
    }

    /**
     * 统计风格数.
     *
     * @return int
     */
    public function countByType($type = 'site')
    {
        return $this->_styleDao()->countByType(trim($type));
    }

    /**
     * 获取当前风格
     *
     * @return array
     */
    public function getCurrentStyleByType($type = 'site')
    {
        return $this->_styleDao()->getCurrentStyleByType(trim($type));
    }

    /**
     * 获取所有风格
     *
     * @param int    $offset
     * @param int    $limit
     * @param string $orderBy
     *
     * @return array
     */
    public function getStyleListByType($type = 'site', $num = 10, $start = 0)
    {
        return $this->_styleDao()->getStyleListByType(trim($type), (int) $num, (int) $start);
    }

    /**
     * 获取风格详细信息.
     *
     * @param int $styleid
     *
     * @return array
     */
    public function getStyle($styleid)
    {
        return $this->_styleDao()->getStyle($styleid);
    }

    /**
     * 获取所有风格
     *
     * @param string $type
     */
    public function getAllStyle($type = 'site')
    {
        return $this->_styleDao()->getAllStyles(trim($type));
    }

    /**
     * 根据风格目录查找风格
     *
     * @param array|string $package
     */
    public function fetchStyleByAliasAndType($alias, $type = 'site', $index = 'app_id')
    {
        if (!$alias) {
            return array();
        }

        return $this->_styleDao()->fetchStyleByAliasAndType($alias, $type, $index);
    }

    /**
     * 根据应用ID查找应用.
     *
     * @param string $appId
     *
     * @return PwError boolean
     */
    public function findByAppId($appId)
    {
        if (!$appId) {
            return new PwError('APPCENTER:validate.fail', array('error' => '应用查找时，应用ID非法'));
        }

        return $this->_styleDao()->findByAppId($appId);
    }

    /**
     * @return PwStyleDao
     */
    private function _styleDao()
    {
        return Wekit::loadDao('APPCENTER:service.dao.PwStyleDao');
    }
}
